\section[Crosscompiling]{Cross-Compiling Java zu Javascript via Toolchaining}
%\subsection{Eine Paperzusammenfassung von Philipp Hannemann}

%\item Motivation, Idee und Problem
%\item Überblick zu bestehenden Tools (Emscripten, GWT, Doppio, Qooxdoo)
%\item Probleme zwischen den Sprachen (GC, Threading, GUI, IO, Reflection)
%\item Toolchaining
%\item Evaluation
%\item Bewertung des Papers

\subsection{Hintergrund}
\begin{frame}
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	\begin{itemize}
		\item Viele Projekte nutzen mehrere Sprachen
		\item Entwickler favorisieren Sprache $\rightarrow$ sollen diese Sprache auch nutzen können (Crosscompiler)
		\item Viele Kombinationen von Quell- und Zielsprachen möglich ($n \cdot m$)
		\item Idee nach Puder et al.: Toolchaining mit Zwischensprache reduziert Anzahl der Kombinationen ($n + m$)
		\item Beispiel: Java nach JavaScript
		\item Nach \cite{puder_emscripten}
	\end{itemize}
\end{frame}

\subsection{Probleme zwischen den Sprachen}
\begin{frame}
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	\begin{itemize}
		\item Garbage Collection bzw. Speicherverwaltung
		\item Java Sprachversion
		\item Java Standard Bibliothek
		\item Dateisystemunterstützung bzw. generell IO
		\item Reflection
		\item GUI bzw. Grafik
		\item Multithreading
	\end{itemize}
\end{frame}

\subsection{Vorhandene Cross-Compiler}
\begin{frame}
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	\begin{itemize}
		\item XML/Emscripten
		\item Google Web Toolkit (GWT)
		\item Qooxdoo Web Toolkit (QWT)
		\item Java2Script
		\item Doppio
	\end{itemize}
	\begin{figure}[h]
		\centering
		\fbox{
			\includegraphics[width=1.0\textwidth]{Bilder/CrossCompilers.png}
		}
		\caption{Features der Cross-Compiler (aus \cite{puder_emscripten})}
		\label{fig:cross_compiler_features}
	\end{figure}
\end{frame}

\subsection{Toolchaining}
\begin{frame}
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	\begin{itemize}
		\item Java $\xmapsto{XMLVM}$ C $\xmapsto{LLVM}$ Bytecode $\xmapsto{Emscripten}$ Javascript
		\item Wegen Reflection sind viele Meta-Informationen nötig $\rightarrow$ extremer Overhead (Simples \emph{Hello World} schon $\sim{}90MB$) $\rightarrow$ Komplizierte Programmzweigverfolgung nötig, so dass Informationen ausgeschlossen werden können
		\item Java-ClassLoading wird durch funktionale Eigenschaften von JavaScript bereitgestellt.
		\item Multithreading wird durch Hauptschleife simuliert
		\item Garbage Collection aus Java wird in C durch Boehm-Collector rudimentär geboten, letztlich werden Zeiger jedoch nicht weiter behandelt, da JavaScript diese durch eigene Garbage Collection selbst behandeln kann
	\end{itemize}
\end{frame}

\subsection{Evaluation}
\begin{frame}
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	\begin{itemize}
		\item Vergleich nur mit GWT, da einziger ernstzunehmender Konkurrent
		%\item Benchmarks: \emph{Linpack}, \emph{JBox2D} und \emph{The Computer Language Benchmarks Game}
		\item Garbage Collection außer Acht gelassen, da in aktueller Version nicht gut genug
		\item Getestet auf Firefox 21 \& Nightly Build sowie auf Chrome 26 \& Dev Build
		\item GWT auf Google Chrome besser als auf Firefox(Wer hätte das gedacht?!)
		\item XMLVM \& Emscripten schneidet bis auf eine Ausnahme durchgehend besser ab als GWT
		\item Initialization Time bei GWT weit kürzer (min. Faktor 300)
	\end{itemize}
	
	\begin{figure}
		\subfigure[Beispiel Benchmark (Sekunden)]{\fbox{\includegraphics[width=0.4\textwidth]{Bilder/ComputerLanguageBenchmark.png}}}
		\subfigure[Ergebnis der Init.-Zeiten (Millisekunden)]{\fbox{\includegraphics[width=0.4\textwidth]{Bilder/InitializationTimes.png}}}
		\caption{Tabellen aus \cite{puder_emscripten}}
	\end{figure}
\end{frame}

\subsection{Bewertung des Papers}
\begin{frame}
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	\begin{itemize}
		\item Paper stellt Idee vor und beschränkt sich auf die wesentlichen Aspekte:
			\begin{itemize}
				\item[$\rightarrow$] Viele Kleinigkeiten sind außen vor gelassen (zum Glück)
				\item[$\rightarrow$] Einige Dinge sind zu genau erklärt (z.B. die Sprache XMLVM)
				\item[$\rightarrow$] Viele interessante/wichtige Details fehlen leider
			\end{itemize}
		\item Idee zwar interessant, jedoch nur bedingt der Wissenschaftlichkeit würdig
		\item Emscripten ist Projekt von Mozilla, wodurch Zweifel an der Wissenschaftlichkeit aufkommen könnten $\rightarrow$ Paper ist jedoch weitestgehend objektiv
	\end{itemize}
\end{frame}
